package ar.com.profertil.santander.parser;

import java.io.Serializable;

import ar.com.profertil.santander.analizer.AnalizerPagos;
import ar.com.profertil.santander.entity.ArchivoPagosRecibidoSantander;
import ar.com.profertil.santander.entity.DetalleAPagos;
import ar.com.profertil.santander.entity.DetalleBPagos;
import ar.com.profertil.santander.entity.DetalleCPagos;
import ar.com.profertil.utils.entity.RecibirArchivoEntity;
import ar.com.profertil.utils.parser.ParserIdoc;

// TODO: Auto-generated Javadoc
/**
 * The Class ParserIdocSantander.
 *
 * @author augusto.ferrari@softtek.com
 * 
 * Esta clase se encarga de definir los metodos para parsear los datos y generar las salidas correspondientes.
 */
public class ParserIdocSantander extends ParserIdoc implements Serializable {

	/** The Constant serialVersionUID. */
	private static final long serialVersionUID = -1701909598240091708L;

	/* (non-Javadoc)
	 * @see ar.com.profertil.utils.parser.ParserIdoc#armarIdocArchivoRecibido(java.lang.String)
	 */
	@Override
	public RecibirArchivoEntity armarIdocArchivoRecibido(String doc) {
		ArchivoPagosRecibidoSantander archivoPagosRecibidoSantander = new ArchivoPagosRecibidoSantander();
		AnalizerPagos analizer = new AnalizerPagos();
		
		analizer.inicializar(doc);
		
		//Llenado datos Header.
		String header = analizer.getHeader();
		archivoPagosRecibidoSantander.getHeader().setCodigoDeOrganismo(header.substring(0, 17));
		archivoPagosRecibidoSantander.getHeader().setNumeroDeRendicion(header.substring(17, 22));
		archivoPagosRecibidoSantander.getHeader().setTipoDeRegistro(header.substring(22, 23));
		archivoPagosRecibidoSantander.getHeader().setIdentificacionDelRegistro(header.substring(23, 42));
		archivoPagosRecibidoSantander.getHeader().setNumeroDeSecuenciaDelRegistro(header.substring(42, 43));
		archivoPagosRecibidoSantander.getHeader().setFechaDeRendicion(header.substring(43, 51));
		archivoPagosRecibidoSantander.getHeader().setRazonSocialEmpresa(header.substring(51, 81));
		archivoPagosRecibidoSantander.getHeader().setCodigoPaisCtaRecaudadora(header.substring(81, 85));
		archivoPagosRecibidoSantander.getHeader().setCodigoMonedaPaisCtaRecaudadora(header.substring(85, 86));
		archivoPagosRecibidoSantander.getHeader().setCodigoEntidadCtaRecaudadora(header.substring(86, 90));
		archivoPagosRecibidoSantander.getHeader().setCodigoSucursalCtaRecaudadora(header.substring(90, 94));
		archivoPagosRecibidoSantander.getHeader().setDvCbuBloque1(header.substring(94, 95));
		archivoPagosRecibidoSantander.getHeader().setFijoCbu2(header.substring(95, 98));
		archivoPagosRecibidoSantander.getHeader().setTipoCuentaRecaudadora(header.substring(98, 99));
		archivoPagosRecibidoSantander.getHeader().setMonedaCuentaRecaudadora(header.substring(99, 100));
		archivoPagosRecibidoSantander.getHeader().setNumeroCuentaRecaudadora(header.substring(100, 111));
		archivoPagosRecibidoSantander.getHeader().setDvCbuBloque2(header.substring(111, 112));
		archivoPagosRecibidoSantander.getHeader().setRelleno(header.substring(112, 400));
		
		//Llenado datos DetalleA.
		String detallesA[] = analizer.getDetalleA();
		archivoPagosRecibidoSantander.inicializarDetalleA(detallesA.length);
		
		for (int i = 0; i < detallesA.length; i++) {
			DetalleAPagos detalle = new DetalleAPagos();
			
			detalle.setCodigoDeOrganismo(detallesA[i].substring(0, 17));
			detalle.setNumeroDeRendicion(detallesA[i].substring(17, 22));
			detalle.setTipoDeRegistro(detallesA[i].substring(22, 23));
			detalle.setIdentificacionDelRegistro(detallesA[i].substring(23, 42));
			detalle.setNumeroDeSecuenciaDelRegistro(detallesA[i].substring(42, 43));
			detalle.setNumeroDeCliente(detallesA[i].substring(43, 65));
			detalle.setNombreDelCliente(detallesA[i].substring(65, 95));
			detalle.setNumeroDeCuitCliente(detallesA[i].substring(95, 106));
			detalle.setFechaDePago(detallesA[i].substring(106, 114));
			detalle.setHoraDePago(detallesA[i].substring(114, 122));
			detalle.setNumeroDeBancoCorresponsal(detallesA[i].substring(122, 125));
			detalle.setCantidadDeDocumentos(detallesA[i].substring(125, 127));
			detalle.setCantidadDeDocumentosPendientes(detallesA[i].substring(127, 129));
			detalle.setTotalDelPago(detallesA[i].substring(129, 144));
			detalle.setTotalComisionEmpresa(detallesA[i].substring(144, 159));
			detalle.setTotalComisionDepositante(detallesA[i].substring(159, 174));
			detalle.setCotizacionDolarVendedor(detallesA[i].substring(174, 189));
			detalle.setCotizacionDolarComprador(detallesA[i].substring(189, 204));
			detalle.setSucursalOrigen(detallesA[i].substring(204, 207));
			detalle.setNumeroDeBoleta(detallesA[i].substring(207, 226));
			detalle.setCodigoDeTransaccion(detallesA[i].substring(226, 230));
			detalle.setRelleno(detallesA[i].substring(230, 400));
			
			archivoPagosRecibidoSantander.agregarDetalleA(i, detalle);
		}
		
		//Llenado datos DetalleB.
		String detallesB[] = analizer.getDetalleB();
		archivoPagosRecibidoSantander.inicializarDetalleB(detallesB.length);
		
		for (int i = 0; i < detallesB.length; i++) {
			DetalleBPagos detalle = new DetalleBPagos();
			
			detalle.setCodigoDeOrganismo(detallesB[i].substring(0, 17));
			detalle.setNumeroDeRendicion(detallesB[i].substring(17, 22));
			detalle.setTipoDeRegistro(detallesB[i].substring(22, 23));
			detalle.setIdentificacionDelRegistro(detallesB[i].substring(23, 42));
			detalle.setNumeroDeSecuenciaDelRegistro(detallesB[i].substring(42, 43));
			detalle.setDescripcionDeLaformaDePago(detallesB[i].substring(43, 51));
			detalle.setNumeroDeInstrumento(detallesB[i].substring(51, 82));
			detalle.setImporte(detallesB[i].substring(82, 97));
			detalle.setFechaDeAcreditacion(detallesB[i].substring(97, 105));
			detalle.setMarcaDeAcreditacion(detallesB[i].substring(105, 106));
			detalle.setFechaCtoCpd(detallesB[i].substring(106, 114));
			detalle.setCodigoDeFormaDePago(detallesB[i].substring(114, 116));
			detalle.setCodigoDeMotivoDeRechazo(detallesB[i].substring(116, 119));
			detalle.setCodigoDeCambiosDeDatos(detallesB[i].substring(119, 120));
			detalle.setCambioDeEstadoDeAcreditacion(detallesB[i].substring(120, 121));
			detalle.setIndicadorPrimeraRendicion(detallesB[i].substring(121, 122));
			detalle.setNumeroDeSecuenciaInstrumento(detallesB[i].substring(122, 124));
			detalle.setRelleno(detallesB[i].substring(124, 400));
			
			archivoPagosRecibidoSantander.agregarDetalleB(i, detalle);
		}
		
		//Llenado datos DetalleC.
		String detallesC[] = analizer.getDetalleC();
		archivoPagosRecibidoSantander.inicializarDetalleC(detallesC.length);
		
		for (int i = 0; i < detallesC.length; i++) {
			DetalleCPagos detalle = new DetalleCPagos();
			
			detalle.setCodigoDeOrganismo(detallesC[i].substring(0, 17));
			detalle.setNumeroDeRendicion(detallesC[i].substring(17, 22));
			detalle.setTipoDeRegistro(detallesC[i].substring(22, 23));
			detalle.setIdentificacionDelRegistro(detallesC[i].substring(23, 42));
			detalle.setNumeroDeSecuenciaDelRegistro(detallesC[i].substring(42, 43));
			detalle.setTipoDeComprobante(detallesC[i].substring(43, 45));
			detalle.setNumeroDeComprobante(detallesC[i].substring(45, 60));
			detalle.setNumeroDeCuota(detallesC[i].substring(60, 64));
			detalle.setFechaDeVencimiento(detallesC[i].substring(64, 72));
			detalle.setTasaDePunitorios(detallesC[i].substring(72, 77));
			detalle.setImporteCuentaComercial(detallesC[i].substring(77, 92));
			detalle.setImportePunitorios(detallesC[i].substring(92, 107));
			detalle.setImporteDeDescuento(detallesC[i].substring(107, 122));
			detalle.setImporteDelPago(detallesC[i].substring(122, 137));
			detalle.setDatoLibre1(detallesC[i].substring(137, 155));
			detalle.setDatoLibre2(detallesC[i].substring(155, 170));
			detalle.setDatoLibre3(detallesC[i].substring(170, 185));
			detalle.setRelleno(detallesC[i].substring(185, 400));
			
			archivoPagosRecibidoSantander.agregarDetalleC(i, detalle);
		}
		
		//Llenado datos Trailer.
		String trailer = analizer.getTrailer();
		archivoPagosRecibidoSantander.getTrailer().setCodigoDeOrganismo(trailer.substring(0, 17));
		archivoPagosRecibidoSantander.getTrailer().setNumeroDeRendicion(trailer.substring(17, 22));
		archivoPagosRecibidoSantander.getTrailer().setTipoDeRegistro(trailer.substring(22, 23));
		archivoPagosRecibidoSantander.getTrailer().setIdentificacionDelRegistro(trailer.substring(23, 42));
		archivoPagosRecibidoSantander.getTrailer().setNumeroDeSecuenciaDelRegistro(trailer.substring(42, 43));
		archivoPagosRecibidoSantander.getTrailer().setCantidadDeRegistros(trailer.substring(43, 53));
		archivoPagosRecibidoSantander.getTrailer().setCantidadDePagosRendidos(trailer.substring(53, 63));
		archivoPagosRecibidoSantander.getTrailer().setTotalDeImporteRendido(trailer.substring(63, 78));
		archivoPagosRecibidoSantander.getTrailer().setAcumuladoDeComisionesDevengar(trailer.substring(78, 93));
		archivoPagosRecibidoSantander.getTrailer().setTotalImporteComisionesCobradas(trailer.substring(93, 108));
		archivoPagosRecibidoSantander.getTrailer().setTotalComisionesDevengarEmpresa(trailer.substring(108, 123));
		archivoPagosRecibidoSantander.getTrailer().setRelleno(trailer.substring(123, 400));
		
		return archivoPagosRecibidoSantander;
	}

}
